Организаторы
NWERC решили, что они хотят улучшить автоматическую оценку посылок в конкурсе,
поэтому теперь они используют две системы: DOMjudge и Kattis. Каждая посылка
оценивается обеими системами, и результаты оценки сравниваются, чтобы
удостовериться, что системы согласованы. Тем не менее, что-то пошло не так в
настройке связи между системами, и теперь жюри знает только все результаты
обеих систем, но не результат каждой отправки! Поэтому Вас просят помочь
выяснить, сколько могло быть корректных результатов.
Вход. Состоит из:
·
одно число n (1 ≤ n ≤ 105) – количество посылок;
·
n строк, каждая из которых
дает результат судейства DOMjudge системы, в произвольном порядке;
·
n строк, каждая из которых
дает результат судейства Kattis системы, в произвольном порядке.
Каждый результат представляет собой строку длины между 5 и 15
символами (включительно), состоящих из строчных букв.
Выход. Выведите максимальное количество результатов, которое были
бы одинаковыми для обеих систем.
Пример входа |
Пример выхода |
5 correct wronganswer correct correct timelimit wronganswer correct timelimit correct timelimit |
4 |
структуры данных
В задаче следует подсчитать какие и сколько результатов
судейства были получены системами DOMjudge и Kattis. Если
результат s системой DOMjudge был получен a раз, а системой Kattis b раз, то количество одинаковых результатов s равно min(a, b).
Подсчитаем в отображении map<string, int> cnt количество
результатов s, которые выдала система
DOMjudge. Далее для каждого результата s
системы Kattis уменьшим значение cnt[s] на единицу (если cnt[s] > 0). Подсчитаем количество таких уменьшений – оно и равно максимальному
количеству результатов, которые были одинаковыми для обеих систем.
Пример
Подсчитаем количество результатов системами DOMjudge и Kattis
в заданном примере.
Одинаковыми в системах были 4 результата.
Реализация алгоритма
Объявим отображение cnt, где cnt[s] хранит
количество результатов s, которые выдала
система DOMjudge.
map<string, int> cnt;
Читаем количество посылок n.
scanf("%d\n", &n);
Подсчитываем количество
результатов системы DOMjudge.
for (i = 0; i < n; i++)
{
gets(s);
cnt[s]++;
}
Обрабатываем результаты
системы Kattis.
res = 0;
for (i = 0; i < n; i++)
{
gets(s);
Если результат s встречался в DOMjudge (cnt[s] > 0), то уменьшаем cnt[s] на единицу и увеличиваем счетчик результатов
res, которые были бы
одинаковыми для обеих систем.
if (cnt[s] > 0)
{
cnt[s]--;
res++;
}
}
Выводим ответ.
printf("%d\n", res);
Java реализация
import java.util.*;
public class Main
{
static Map<String,
Integer> cnt = new
HashMap<String, Integer>();
public static void main(String[] args)
{
Scanner con = new
Scanner(System.in);
int n = con.nextInt();
for(int i = 1; i <= n; i++)
{
String s = con.next();
if (!cnt.containsKey(s))
cnt.put(s, 1);
else
cnt.put(s, cnt.get(s) + 1);
}
int res = 0;
for(int i = 1; i <= n; i++)
{
String s = con.next();
if (cnt.containsKey(s) && cnt.get(s) > 0)
{
cnt.put(s, cnt.get(s) - 1);
res++;
}
}
System.out.print(res);
con.close();
}
}